Skip to content

Shell 入门:简介、常用命令与脚本基础


一、Shell 简介

Shell 是操作系统的命令行解释器,也是用户与内核交互的桥梁,能执行命令、通过脚本自动化任务。

Shell 的作用

作为「中间人」,Shell 接收用户输入的命令,传递给操作系统内核执行;内核处理后将结果返回,再由 Shell 呈现给用户,无需直接操作底层硬件。

主要功能

  1. 执行单条命令,例如 ls 查看目录、cd 切换路径。
  2. 运行 Shell 脚本(.sh 文件),批量执行一系列命令,实现自动化(如批量备份、日志分析)。
  3. 支持管道(|)、重定向(>>>)等语法,组合多个命令完成复杂任务。
  4. 提供变量、循环、条件判断等编程特性,具备简单的脚本编程能力。

常见 Shell 类型

  1. Bash(Bourne Again Shell):多数 Linux 发行版默认 Shell,兼容大部分 Unix 命令,功能全面。
  2. Sh(Bourne Shell):早期 Unix 标准 Shell,功能基础,兼容性强。
  3. Zsh:兼容 Bash,增强自动补全、主题等,开发者常用。
  4. Csh / Tcsh:语法接近 C 语言,适合习惯 C 风格的用户。

现实中终端里执行的往往是 Bash 或 Zsh;写脚本时建议在首行用 shebang 指定解释器(见下文),避免「在本机行、在别人机器上不行」的环境差异。


二、常见 Shell 命令速查

下列命令按用途分组,说明尽量保留原表述并稍作归类,便于检索。

文件与目录

命令说明
ls列出目录内容;ls -l 详细信息,ls -a 含隐藏文件
cd [目录]切换目录;cd .. 上级,cd ~ 家目录
pwd当前工作目录路径
mkdir [目录名]创建目录;mkdir -p 父/子 递归创建
touch [文件]创建空文件或更新时间戳
cp [源] [目标]复制;cp -r 递归复制目录
mv [源] [目标]移动或重命名
rm [文件]删除文件;rm -r 删目录,rm -f 强制
cat [文件]查看全文;head -n 5tail -n 5 看首尾行
find [路径] -name [名]按名称查找文件或目录

系统与进程

命令说明
ps进程列表;ps aux 详细信息
kill [PID]终止进程;kill -9 强制
top实时监控资源与进程
df -h磁盘空间(-h 人类可读单位)
free -h内存使用
uname -a内核与主机信息
uptime运行时间与负载

用户与权限

命令说明
whoami当前用户名
su [用户]切换用户;su - 并加载目标用户环境
sudo [命令]以管理员权限执行
chmod [权限] [文件]改权限,如 chmod 750 脚本.sh(仅属主可写、组可读执行);7=4+2+1
chown [用户:组] [文件]改所有者与属组

网络

命令说明
ping连通性测试
ifconfig / ip addr网卡与 IP、MAC
netstat -tuln / ss -tuln监听端口(ss 通常更快)
curl [URL]HTTP;curl -O [URL] 下载
wget [URL]下载;wget -c 断点续传

压缩与解压

shell
# 打包并压缩(gzip)
tar -zcvf [包名].tar.gz [文件或目录]
tar -zxvf [包名].tar.gz

# zip
zip [包名].zip [文件]
unzip [包名].zip

其他常用

命令说明
grep [关键词] [文件]搜索;-i 忽略大小写,-r 递归目录
echo [内容]输出;> 覆盖,>> 追加重定向到文件
man [命令]手册;[命令] --help 简版帮助
history历史命令;!n 执行第 n 条

三、Shell 脚本:创建与执行

Shell 脚本是包含一系列 Shell 命令的文本文件,由解释器(如 bashshzsh)逐行执行,无需编译。

创建脚本的一般步骤

shell
# 通常使用 .sh 后缀(非强制,只是便于识别)
touch script.sh

# 赋予执行权限(若要用 ./script.sh 方式运行)
chmod +x script.sh   # 或 chmod 750 script.sh(仅属主/组可执行,更安全)

# 编辑首行:指定解释器(shebang)
#!/bin/bash   # 使用 bash(功能多)
#!/bin/sh     # 使用 sh(兼容性往往更好,功能较少)

执行方式

shell
# 方式一:可执行权限 + 路径执行
chmod +x script.sh
./script.sh

# 方式二:显式指定解释器(可不 chmod +x)
bash script.sh
sh script.sh

脚本参数(位置参数)

在脚本内部可用下列特殊变量获取命令行参数:

变量含义
$0脚本名(含路径时即为调用形式)
$1$9第 1~9 个参数
${10} 及以上第 10 个起必须用 ${n},不能写 $10(会被解析为 $1 加字符 0
$#参数个数
$*所有参数(一个整体)
$@所有参数(独立单词,常配合 "$@" 使用)
$?上一条命令的退出状态(0 成功,非 0 失败)
$$当前脚本进程 PID

示例脚本:

shell
echo "脚本名:$0"
echo "参数1:$1"
echo "参数总数:$#"
echo "所有参数:$@"

执行 ./script.sh a b c 时,输出大致为:

text
脚本名:./script.sh
参数1:a
参数总数:3
所有参数:a b c

补充说明

  • 可移植性:若目标环境只有 /bin/sh,脚本应避免 Bash 独有语法,或在 shebang 中固定 bash 并确保目标机已安装。

  • 安全:涉及路径、用户输入时,变量尽量加引号,例如 "$1",避免空格与换行造成意外拆分。

  • 下一章:变量与数据类型:字符串、数字与数组

  • 运维向脚本范例:安全、告警与系统初始化 起的「运维脚本示例」子目录。